iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0
  • 目錄
    • Introduce Helm Chart
    • @ Introduce Kustomize @

Kustomize 介紹

Kustomize 是K8s SIGs的子專案
他的好用之處在於可以像Docker-compose一樣定義很多個Services
但是Kustomize基於K8s, 可以讓namespace下面跑的pods, ingresses都一目了然
甚至你可以使用Overlays將部署環境(alpha, beta, production..)做區隔

在Mac上面妳可以很簡單的安裝

brew install kustomize

至於其他的OS可以參考Kustomize的Install.md

就像以下這張圖

kustomization.yaml 就是在下 kustomize build指令時會根據resource去抓你的檔案
通常會有deployment & service兩種檔案

這兩種檔案就是為你建一個Workload, 再幫你Expose對其他pods的端口
也可以再加上Ingress, 但是我這邊選擇第一次apply之後手動加上去
就不用再多弄出一個ingress檔案

  • deployment的寫法可以參考這裡
  • service的寫法則可以參考這裡

而這是我的

  • deployment.yaml

  • service.yaml

  • kustomization.yaml

將它們放在你的專案根目錄底下
例如我的資料夾目錄長這樣

輸入

cd kustomize/base
kustomize build .

kustomize就會生成deployment.yaml還有service.yaml
這時候再輸入

kubectl apply --server=$${Your k8s cluster server}  --token=$${Your k8s apply token} --insecure-skip-tls-verify=true --namespace=$${Your k8s name space}  -f -

就可以建立workloads了
如果有使用Rancher就可以看到服務跑起來的狀況

如果你是要更新現有的workloads, 遇到這款問題
這就是創建的pod template hash label跟你Deployment不符合,所以K8s不讓你更新
我之前是直接用Rancher UI去幫我創建workloads,所以就遇到這個問題

解決方法是直接砍掉,用kubectl command創建新的Workloads。

.drone.yml寫法請參考這裡

我的做法是:

  1. build image
  2. push to remote image registry
  3. Replace image by kustomize edit
kustomize edit set image {{your remote image}} 

跑完這個指令就可以把docker image換成最新的
然後再利用Kustomize生成部署文件

Kustomize edit 還可以玩很多請看這裡

最後Deploy時會用到drone secret
Drone secret非常方便,能夠直接以環境變數的方式在跑Pipeline時寫進去
但是也有能夠被print出來的問題
所幸在Drone 可以限制哪個Repository, image可以存取這個Drone secret(怎麼限制)

+++同場加映: Drone 1.0要如何get secret

Kustomize Overlays

部署完之後,就會開始思考環境的事情
這時候就可以善用base/overlays

請看以下這兩張圖:

這是你的檔案目錄會有的樣子:

基本上我第一次看的時候也沒有看得很懂...XD

後來才知道Overlays是把裡面有的Tags附加在base上面
或是把base有的Tags換掉

這是我的檔案樹, 或許會比較清楚

根據環境的不同,Deploy的時候就要到那個環境的資料夾底下下Kustomize指令
這是production的Kustomize

可以看到我根據base資料夾的yaml file還額外requires kafka-consumer-env-prod.yaml
這是production的kafka-consumer-env-prod.yaml

可以看到我這邊把Replicas代換成3
還額外增加了兩個process enviroment variables給這個Workloads

Reference

  1. https://github.com/kubernetes-sigs/kustomize
  2. https://kubectl.docs.kubernetes.io/pages/imperative_porcelain/editing_workloads.html
  3. https://docs.drone.io/user-guide/pipeline/steps/

上一篇
Oh My Helm ! 部署應用的神兵利器 - 1
下一篇
Oh my K8s service ! 談談Kube-proxy - 1
系列文
其實我真的沒想過要利用夾縫中求生存的 30 天K8s可以怎麼用12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言